package com.xiaoxi.open.common.constant;

/**
 * (pattern)
 * 匹配 pattern 并捕获该匹配的子表达式。可以使用 $0…$9 属性从结果"匹配"集合中检索捕获的匹配。若要匹配括号字符 ( )，请使用"\("或者"\)"。
 * (?=pattern)
 * 执行正向预测先行搜索的子表达式
 * 该表达式匹配处于匹配 pattern 的字符串的起始点的字符串。
 * 它是一个非捕获匹配，即不能捕获供以后使用的匹配。
 * 例如，'Windows (?=95|98|NT|2000)' 匹配"Windows 2000"中的"Windows"，但不匹配"Windows 3.1"中的"Windows"。
 * 预测先行不占用字符，即发生匹配后，下一匹配的搜索紧随上一匹配之后，而不是在组成预测先行的字符后。
 *
 * @author xiaoxi
 * @version 1.0
 * @date 2022/5/16 15:38
 */
public interface RegularConstants {

    /**
     * 匹配 密码 包含：数字、字母、特殊字符，且 长度 在  8 - 20
     */
    String REGULAR_PASSWORD_COMPLEXITY = "^(?=.*[\\w])(?=.*[\\W])[\\w\\W]{8,20}";

    /**
     * 校验 ipv4 地址 合法性
     */
    String REGULAR_IPV4 = "(((2([0-4]\\d|[0-5]{2}))|1\\d{2}|[1-9]\\d|\\d)\\.){3}((2([0-4]\\d|[0-5]{2}))|1\\d{2}|[1-9]\\d|\\d)";

    /**
     * 校验 ipv6 地址 合法性
     */
    String REGULAR_IPV6 = "([0-9a-fA-F]{1,5}:){7}[0-9a-fA-F]{1,4}";

    /**
     * 手机号校验
     */
    String REGULAR_PHONE = "^((13[0-9])|(14[05679])|(15([0-3,5-9]))|(16[2567])|(17[01235678])|(18[0-9]|19[135689]))\\d{8}$";

}
